این جلسه یکی از مباحث مهم در آزمونهای لینوکس است. تفاوت Type 1 و Type 2 حتماً سوال میآید.
🏢 قبل از شروع، یه مثال ساده:
فرض کن یه ساختمان بزرگ داری. میتونی چند تا روش برای تقسیمش به بخشهای کوچیکتر استفاده کنی:
- مجازیسازی سطح یک (Type 1): مثل اینه که ساختمان رو به چند آپارتمان مستقل تقسیم کنی که هرکدوم درِ جداگانه دارن (مثل KVM).
- مجازیسازی سطح دو (Type 2): مثل اینه که توی یکی از آپارتمانها، یه اتاق رو به اجاره بدی (مثل VirtualBox).
- کانتینرها: مثل اینه که توی یه آپارتمان، چند تا اتاق رو با دیوارهای موقت جدا کنی (مثل Docker).
▍ مقدمه
مجازیسازی (Virtualization) به معنای اجرای چندین سیستمعامل یا محیط مجزا روی یک سختافزار فیزیکی است. این تکنولوژی به مدیران سیستم کمک میکند تا از منابع سختافزاری بهینهتر استفاده کنند، هزینهها را کاهش دهند و مدیریت سیستم را آسانتر کنند.
▍ انواع مجازیسازی
🔵 Type 1 (Hypervisor Bare-Metal)
- مستقیماً روی سختافزار اجرا میشود.
- میزبان (Host) نیست، بلکه خودش میزبان است.
- عملکرد بالا و مصرف منابع کم.
- مثالها: KVM, Xen, Hyper-V
🟠 Type 2 (Hypervisor میزبانی)
- به عنوان یک برنامه روی سیستمعامل میزبان اجرا میشود.
- عملکرد کمتر از Type 1 (به دلیل لایه میزبان).
- مناسب برای تست و توسعه.
- مثالها: VirtualBox, VMware Workstation
تفاوت کلیدی: Type 1 مستقیماً روی سختافزار اجرا میشود (بدون سیستمعامل میزبان)، اما Type 2 روی یک سیستمعامل میزبان نصب میشود.
▍ مجازیسازی سطح یک (Type 1) — KVM
KVM (Kernel-based Virtual Machine) یک راهحل مجازیسازی متنباز است که به هسته لینوکس تبدیل به یک Hypervisor Type 1 میشود.
• پیشنیازهای سختافزاری
برای استفاده از KVM، پردازنده باید از مجازیسازی سختافزاری پشتیبانی کند:
- پردازندههای Intel: باید
vmx (Virtual Machine Extensions) را داشته باشند.
- پردازندههای AMD: باید
svm (Secure Virtual Machine) را داشته باشند.
┌──(ya3in㉿kali)-[~]
└─$ grep -E "vmx|svm" /proc/cpuinfo
توضیح: این دستور نشان میدهد که پردازنده از مجازیسازی سختافزاری پشتیبانی میکند یا خیر.
• نصب و راهاندازی KVM
┌──(ya3in㉿kali)-[~]
└─$ sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
توضیح: نصب KVM و ابزارهای مدیریت آن در دبیان/کالی.
برای بررسی اینکه KVM بارگذاری شده است، از دستور lsmod | grep kvm استفاده کنید.
┌──(ya3in㉿kali)-[~]
└─$ lsmod | grep -i kvm
kvm_intel 28672 0
kvm 77824 1 kvm_intel
توضیح: این خروجی نشان میدهد که ماژول KVM (برای پردازنده Intel) بارگذاری شده است.
• بارگذاری دستی ماژول KVM
اگر ماژول KVM بارگذاری نشده باشد، میتوانید آن را بهصورت دستی بارگذاری کنید:
┌──(ya3in㉿kali)-[~]
└─$ sudo modprobe kvm-amd
توضیح: برای پردازندههای AMD از kvm-amd و برای Intel از kvm-intel استفاده کنید.
نکته امتحانی: برای پردازندههای Intel از modprobe kvm-intel و برای AMD از modprobe kvm-amd استفاده میشود.
▍ مجازیسازی سطح دو (Type 2)
در این نوع مجازیسازی، Hypervisor به عنوان یک برنامه معمولی روی سیستمعامل میزبان اجرا میشود. سیستمعامل مهمان (Guest) روی این Hypervisor اجرا میشود و ممکن است کاملاً با سیستمعامل میزبان متفاوت باشد.
💡 مثال: VirtualBox روی ویندوز نصب میشود و یک ماشین مجازی لینوکس را روی آن اجرا میکند.
• مزایا و معایب Type 2
- مزایا: نصب آسان، مناسب برای تست و توسعه، پشتیبانی از سیستمعاملهای مختلف.
- معایب: عملکرد کمتر از Type 1 (به دلیل لایههای اضافی)، مصرف منابع بیشتر.
▍ مقایسه Type 1 و Type 2
| ویژگی |
Type 1 (Bare-Metal) |
Type 2 (Hosted) |
| اجرا |
مستقیماً روی سختافزار |
روی سیستمعامل میزبان |
| عملکرد |
بالا |
متوسط تا پایین |
| مصرف منابع |
کم |
زیاد |
| مثال |
KVM, Xen, Hyper-V |
VirtualBox, VMware Workstation |
| کاربرد |
سرورها، دیتاسنترها |
توسعه، تست، دسکتاپ |
در امتحان معمولاً سوال میشود: «KVM از چه نوع Hypervisor است؟» پاسخ: Type 1 (Bare-Metal).
▍ کانتینرها (Containers)
کانتینرها یک روش سبکتر برای مجازیسازی هستند که به جای مجازیسازی سختافزار، هسته (Kernel) سیستم میزبان را به اشتراک میگذارند.
🟣 مجازیسازی کامل (VM)
- هر VM سیستمعامل کامل دارد.
- هسته اختصاصی دارد.
- حجم بالا (چند گیگابایت).
- زمان بوت: چند دقیقه.
🟢 کانتینرها
- هسته میزبان را به اشتراک میگذارند.
- فقط برنامه و کتابخانههای آن را دارند.
- حجم کم (چند مگابایت).
- زمان بوت: چند ثانیه.
تفاوت اصلی کانتینرها با ماشینهای مجازی: کانتینرها هسته (Kernel) میزبان را به اشتراک میگذارند، اما ماشینهای مجازی هر کدام هستهی مخصوص خود را دارند.
• کانتینرهای برنامه (Application Containers)
این نوع کانتینرها روی یک برنامه خاص یا یک پشته برنامه (مثل وب سرور) تمرکز دارند. آنها به شدت در DevOps و توسعه مداوم نرمافزار (Continuous Deployment) استفاده میشوند.
💡 مزیت کانتینرهای برنامه:
- توسعهدهندگان میتوانند برنامه را در یک کانتینر جدید تغییر دهند.
- همان کانتینر در محیط تست و سپس تولید (Production) استفاده میشود.
- کانتینر قدیمی حذف و کانتینر جدید جایگزین میشود (بدون وقفه).
- تفاوت بین محیط توسعه و تولید از بین میرود.
• ابزارهای محبوب کانتینر
- Docker: محبوبترین ابزار کانتینر.
- Podman: جایگزین Docker (بدون نیاز به دیمون).
- LXC/LXD: کانتینرهای سیستمی (شبیه VM اما سبکتر).
- Kubernetes: مدیریت کانتینرها در مقیاس بزرگ (Orchestration).
نکته امتحانی: Docker محبوبترین ابزار کانتینر و Kubernetes محبوبترین ابزار مدیریت کانتینر است.
▍ خلاصه و جمعبندی
| مفهوم |
توضیح |
| Type 1 Hypervisor |
مستقیماً روی سختافزار (مثل KVM) |
| Type 2 Hypervisor |
روی سیستمعامل میزبان (مثل VirtualBox) |
| KVM |
Hypervisor Type 1 در لینوکس |
| vmx / svm |
پشتیبانی از مجازیسازی سختافزاری (Intel/AMD) |
| کانتینرها |
مجازیسازی در سطح سیستمعامل (سبکتر) |
| Docker |
ابزار محبوب کانتینر |
✅ جمعبندی نهایی برای امتحان:
- Type 1: KVM, Xen, Hyper-V → اجرا روی سختافزار
- Type 2: VirtualBox, VMware Workstation → اجرا روی سیستمعامل میزبان
- KVM: نیاز به
vmx (Intel) یا svm (AMD)
- دستورات KVM:
lsmod | grep kvm، modprobe kvm-amd
- کانتینرها: سبکتر از VM، هسته را به اشتراک میگذارند.
- Docker: معروفترین ابزار کانتینر.